From d5b96b95a08c4491797bea470835278f74b907c5 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Tue, 8 Jul 2014 15:35:18 +0200 Subject: [PATCH] range: Avoid animations during slider drag If the drag gesture gets a GtkGesture::updated signal, the user is directly interacting through pointer/touch with the range slider, animating the adjustment value change in this situation can produce perceived lag, so set the value immediately when this is happening. --- gtk/gtkrange.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/gtk/gtkrange.c b/gtk/gtkrange.c index 5f309b9026..84e79fa0bf 100644 --- a/gtk/gtkrange.c +++ b/gtk/gtkrange.c @@ -156,6 +156,9 @@ struct _GtkRangePrivate /* Fill level */ guint show_fill_level : 1; guint restrict_to_fill_level : 1; + + /* Whether dragging is ongoing */ + guint in_drag : 1; }; @@ -2909,6 +2912,7 @@ gtk_range_drag_gesture_update (GtkGestureDrag *gesture, gtk_gesture_drag_get_start_point (gesture, &start_x, &start_y); priv->mouse_x = start_x + offset_x; priv->mouse_y = start_y + offset_y; + priv->in_drag = TRUE; update_autoscroll_mode (range); @@ -2922,6 +2926,7 @@ gtk_range_drag_gesture_end (GtkGestureDrag *gesture, gdouble offset_y, GtkRange *range) { + range->priv->in_drag = FALSE; stop_scrolling (range); } @@ -3997,7 +4002,11 @@ gtk_range_real_change_value (GtkRange *range, priv->need_recalc = TRUE; gtk_widget_queue_draw (GTK_WIDGET (range)); - gtk_adjustment_animate_to_value (priv->adjustment, value); + + if (priv->in_drag) + gtk_adjustment_set_value (priv->adjustment, value); + else + gtk_adjustment_animate_to_value (priv->adjustment, value); } return FALSE; -- 2.30.2